Current graphics data processing is includes systems and methods developed to perform a specific operation on graphics data, e.g., linear interpolation, tessellation, rasterization, texture mapping, depth testing, etc. Traditionally graphics processors include several fixed function computation units to perform such specific operations, and more recently, the computation units have a degree of programmability to perform user specified operations.
While computation units included in each graphics processor can vary, a common element is a sampling unit that processes graphics primitives (basic geometrical constructs, such as points, lines, triangles, quadrilaterals, meshes) and generates sub-primitive data (such as pixel data or fragment data). A graphics processor uses a sampling unit and computation units to convert graphics primitives into sub-primitive data and generate image data.
Graphics processors use memory to store graphics data and program instructions, where graphics data is any data that is input to or output from the computation units within the graphics processor. Graphics memory is any memory used to store graphics data or program instructions to be executed by the graphics processor. Graphics memory can include portions of system memory, local memory directly coupled to the graphics processor, register files coupled to the computation units within the graphics processor, and the like.
The computation units within some graphics processors are coupled to each other to form a graphics pipeline such that the output of a first computation unit is coupled to the input of a second computation unit to form a node. Subsequent computation units are coupled in sequence to form additional nodes. Additional computational units can be connected between two nodes to form parallel computational units. Within the graphics pipeline processing can proceed simultaneously within each of the computational units. Furthermore, processing can be performed in multiple passes through the graphics pipeline.
Recently the complexity of vertex processing used to create an image has increased due to the use of vertex programs. When vertex data generated using a vertex program will be processed to create several images it is desirable to store the vertex data in graphics memory. Conventional graphics processors pass the vertex data through the graphics pipeline, bypassing the computation units, and write the vertex data to graphics memory using an interface normally used to write pixel data. The portion of the graphics pipeline containing computation units that typically perform pixel computations is configured to pass the vertex data through to the interface normally used to write pixel data. Therefore pixel computations that are not performed during the first processing pass of data through the graphics pipeline are deferred to a subsequent processing pass.
Accordingly, it would be desirable to provide improved approaches to storing vertex data in graphics memory.